package objectos;

/**
 * @author igo
 * Classe Pokemon
 */
public class Pokemon extends Objecto{
    
    private String Nome = "";
    private TipoPokemon Tipo;
    private String Dono = "";
    private int ataque = 0;
    private int vida = 1;
    private int range = 0;
    private int velocidade = 1;
    private boolean vivo = true;
    
    /**
     * Constructor do Pokemon
     * @param N - Recebe o Nome do Pokemon
     * @param T - Recebe o Tipo do Pokemon
     * @param D - Recebe o Nick do Respectivo Jogador
     */
    public Pokemon(String N, TipoPokemon T, String D){
        this.Nome = N;
        this.Tipo = T;
        this.Dono = D;
        
        if(T == TipoPokemon.AGUA){
            ataque = 20;
            vida = 100;
            range = 3;
            velocidade = 3;
        }else if (T == TipoPokemon.ERVA){
            ataque = 15;
            vida = 200;
            range = 2;
            velocidade = 2;
        }else if(T == TipoPokemon.FOGO){
            ataque = 10;
            vida = 150;
            range = 5;
            velocidade = 5;
        }
    }
    
    /**
     * 
     * @return Retorna o estado do Pokemon, true se estiver vivo ou false caso já tenha morrido em jogo.
     */
    public boolean estaVivo(){
        return vivo;
    }
    
    /**
     * Método que "mata" o Pokemon
     */
    public void Morreu(){
        vivo = false;
        vida = 0;
    }
    
    /**
     * 
     * @return Retorna o Nick do "Dono" do Pokemon
     */
    public String getDono(){
        return Dono;
    }
    
    /**
     * 
     * @return Retorna o dano que o Pokemon causa ao atacar.
     */
    public int getAtaque(){
        return ataque;
    }
    
    /**
     * 
     * @return Retorna a vida que o Pokemon tem.
     */
    public synchronized int getVida(){
        return vida;
    }
    
    /**
     * Método que altera a vida do Pokemon consoante o valor com o qual é atacado.
     * @param x - Recebe um numero inteiro que irá ser o dano sofrido.
     */
    public synchronized void Sofre(int x){
        this.vida-=x;
    }
    
    /**
     * 
     * @return Retorna o Range do Pokemon
     */
    public int getRange(){
        return range;
    }
    
    /**
     * 
     * @return Retorna a Velocidade a que o Pokemon se mexe
     */
    public int getVelocidade(){
        return velocidade;
    }

    @Override
    public String getNome() {
        return Nome;
    }

    @Override
    public TipoObjecto getTipo() {
        return TipoObjecto.POKEMON;
    }
    
    /**
     * 
     * @return Retorna o Tipo de Pokemon
     */
    public TipoPokemon tipoPokemon(){
        return Tipo;
    }
}